Apex Batch Processing হলো Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের জন্য ব্যবহৃত একটি Asynchronous পদ্ধতি। এটি বড় ডেটাসেটকে ছোট ছোট অংশে ভাগ করে প্রসেসিং করে, যা গভর্নর লিমিট অতিক্রম না করেই কার্যকরীভাবে বিশাল পরিমাণ ডেটা প্রক্রিয়া করতে সহায়ক। Apex Batch Processing সাধারণত লং-রানিং প্রসেস যেমন ডেটা আপডেট, রেকর্ড ডিলিট, বা বড় ডেটাসেটের উপর নির্দিষ্ট অপারেশন চালানোর জন্য ব্যবহৃত হয়।
Apex Batch Processing ক্লাস তিনটি মেথডের মাধ্যমে কাজ করে:
Batch ক্লাসে Database.Batchable ইন্টারফেস ইমপ্লিমেন্ট করতে হয়।
apex
Copy code
global class BatchExample implements Database.Batchable<SObject> {
global Database.QueryLocator start(Database.BatchableContext BC) {
// Start method: Query to fetch records for processing
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
global void execute(Database.BatchableContext BC, List<SObject> scope) {
// Execute method: Process each batch of records
for (SObject s : scope) {
Account acc = (Account) s;
acc.Name = acc.Name + ' - Processed';
}
update scope;
}
global void finish(Database.BatchableContext BC) {
// Finish method: Final actions after all batches are processed
System.debug('Batch process completed.');
}
}
start
মেথডে SOQL কুয়েরির মাধ্যমে প্রক্রিয়াকরণের জন্য ডেটা সিলেক্ট করা হয়।execute
মেথডে ডেটার ব্যাচে নির্দিষ্ট লজিক চালানো হয়।finish
মেথডে সমস্ত ব্যাচ প্রসেসিং সম্পন্ন হওয়ার পরে চূড়ান্ত কাজ সম্পন্ন করা হয়।Database.executeBatch(new BatchExample(), 100);
executeBatch
মেথড দিয়ে Batch Apex চালানো হয়। দ্বিতীয় প্যারামিটার হিসেবে ব্যাচ সাইজ নির্ধারণ করা হয় (যেমন ১০০)।finish
মেথডে চূড়ান্ত কাজ সম্পন্ন করা যায়।try-catch
ব্লক দিয়ে Exception Handling নিশ্চিত করুন, যাতে ব্যাচের একটি অংশে সমস্যা হলেও প্রক্রিয়া ব্যাহত না হয়।Database.Stateful
ইন্টারফেস ব্যবহার করা যেতে পারে।global class StatefulBatchExample implements Database.Batchable<SObject>, Database.Stateful {
global Integer processedRecords = 0;
global Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
global void execute(Database.BatchableContext BC, List<SObject> scope) {
for (SObject s : scope) {
Account acc = (Account) s;
acc.Name = acc.Name + ' - Processed';
processedRecords++;
}
update scope;
}
global void finish(Database.BatchableContext BC) {
System.debug('Total Records Processed: ' + processedRecords);
}
}
Database.Stateful
ইন্টারফেস ব্যবহার করে ব্যাচ প্রসেসিং চলাকালীন ডেটা স্টেট ট্র্যাক রাখা হয়েছে।global class BatchExample implements Database.Batchable<SObject> {
global Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
global void execute(Database.BatchableContext BC, List<SObject> scope) {
for (SObject s : scope) {
Account acc = (Account) s;
acc.Name = acc.Name + ' - Processed';
}
update scope;
}
global void finish(Database.BatchableContext BC) {
System.debug('Batch process completed.');
}
}
@isTest
public class BatchExampleTest {
@isTest
static void testBatchExecution() {
// Test data creation
List<Account> accList = new List<Account>();
for (Integer i = 0; i < 500; i++) {
accList.add(new Account(Name = 'Test Account ' + i));
}
insert accList;
// Execute batch
Test.startTest();
Database.executeBatch(new BatchExample(), 100);
Test.stopTest();
// Verify that names were updated
List<Account> updatedAccounts = [SELECT Name FROM Account WHERE Name LIKE 'Test Account% - Processed'];
System.assertEquals(500, updatedAccounts.size(), 'All accounts should be processed');
}
}
Database.executeBatch
এবং System.assertEquals
ব্যবহার করে নাম পরিবর্তন সঠিকভাবে সম্পন্ন হয়েছে কি না তা যাচাই করা হয়েছে।Apex Batch Processing Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের জন্য ব্যবহৃত একটি কার্যকরী এবং নির্ভরযোগ্য পদ্ধতি। এটি ব্যাকগ্রাউন্ডে বড় পরিমাণ ডেটা প্রক্রিয়া করে এবং গভর্নর লিমিট অতিক্রম না করেই ডেটা আপডেট, ক্লিনআপ, এবং রিপোর্টিং-এর মতো কাজ সম্পন্ন করতে সহায়ক। সঠিক ব্যাচ সাইজ, Exception Handling, এবং Stateful অপশনের মাধ্যমে Batch Apex-কে আরও উন্নত ও কার্যক্ষম করা সম্ভব। Test Coverage নিশ্চিত করে এবং গভর্নর লিমিট মেনে Batch Apex ব্যবহার করে Salesforce অ্যাপ্লিকেশনকে আরও দক্ষ ও নির্ভরযোগ্য করে তোলা যায়।
Batch Apex হলো Salesforce-এর একটি Asynchronous Apex ফ্রেমওয়ার্ক, যা বড় ডেটাসেট বা দীর্ঘ সময় ধরে চলা কার্যক্রম ছোট ছোট অংশে ভাগ করে প্রসেস করার জন্য ব্যবহৃত হয়। Salesforce-এর গভর্নর লিমিট থাকা সত্ত্বেও Batch Apex বড় ডেটাসেটের উপর কার্যক্ষমতা নিশ্চিত করে এবং একাধিক ব্যাচে বিভক্ত করে ডেটা প্রক্রিয়া করে। এটি ব্যবহার করে ডেটাবেসের একটি বড় টেবিলের হাজার হাজার রেকর্ড নিয়মিত আপডেট, প্রসেস, বা ডিলিট করা যায়।
Batch Apex ক্লাস তৈরি করতে Database.Batchable
ইন্টারফেস ইমপ্লিমেন্ট করতে হয় এবং তিনটি মেথড ব্যবহার করতে হয়:
নিচে Account
অবজেক্টের ডেটা প্রসেস করতে একটি সাধারণ Batch Apex ক্লাসের উদাহরণ দেয়া হলো।
public class AccountBatchExample implements Database.Batchable<SObject> {
// start মেথডে প্রাথমিক SOQL কুয়েরি বা ডেটাসেট সিলেক্ট করা হয়
public Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
// execute মেথডে প্রতিটি ব্যাচের ২০০টি রেকর্ড প্রক্রিয়া করা হয়
public void execute(Database.BatchableContext BC, List<SObject> scope) {
for (SObject s : scope) {
Account acc = (Account) s;
acc.Name = acc.Name + ' Updated';
}
update scope;
}
// finish মেথডে ব্যাচ প্রক্রিয়াকরণের পরে চূড়ান্ত কাজ সম্পন্ন করা হয়
public void finish(Database.BatchableContext BC) {
System.debug('Batch process completed.');
}
}
// Batch Apex ক্লাস এক্সিকিউট করা
Database.executeBatch(new AccountBatchExample(), 100);
Batch Apex ক্লাস চালানোর জন্য Database.executeBatch()
মেথড ব্যবহার করতে হয়। এখানে, প্রথম প্যারামিটার হিসেবে Batch Apex ক্লাসের ইনস্ট্যান্স এবং দ্বিতীয় প্যারামিটার হিসেবে ব্যাচ সাইজ প্রদান করতে হয়।
Database.executeBatch(new AccountBatchExample(), 100);
এখানে 100
হল ব্যাচ সাইজ, অর্থাৎ প্রতিটি ব্যাচে ১০০টি রেকর্ড প্রক্রিয়াকৃত হবে।
Batch Apex বড় ডেটাসেট বা দীর্ঘমেয়াদী কার্যক্রম ছোট ব্যাচে ভাগ করে প্রক্রিয়া করার একটি শক্তিশালী পদ্ধতি, যা Salesforce গভর্নর লিমিটের মধ্যে থেকে কার্যক্ষমতা নিশ্চিত করে। Batch Apex বড় ডেটা ক্লিন-আপ, ডেটা প্রসেসিং, এবং অ্যাসিঙ্ক্রোনাস কার্যক্রমে ব্যবহৃত হয় এবং Salesforce অ্যাপ্লিকেশনকে আরও কার্যকর ও সুরক্ষিত রাখতে সহায়ক।
Batch Apex Execution এবং Batch Size Optimization হলো Salesforce-এ Batch Apex সঠিকভাবে সম্পাদনের জন্য গুরুত্বপূর্ণ দুটি দিক। Batch Execution প্রক্রিয়াকরণের কাজকে ছোট ছোট অংশে ভাগ করে কার্যক্ষমতা বাড়ায়, এবং Batch Size Optimization সঠিক ব্যাচ সাইজ নির্ধারণ করে গভর্নর লিমিট মেনে কার্যক্ষমতা নিশ্চিত করে।
Batch Apex Execution হলো Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের একটি প্রক্রিয়া, যা ডেটাকে ছোট ছোট অংশে ভাগ করে কার্যসম্পাদনা করে। এতে তিনটি ধাপ রয়েছে: start, execute, এবং finish।
Start Method ডেটা সংগ্রহ করে প্রক্রিয়াকরণের জন্য প্রস্তুত করে। এখানে SOQL কুয়েরির মাধ্যমে প্রক্রিয়াকরণের জন্য ডেটা সিলেক্ট করা হয়।
global Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
Execute Method প্রক্রিয়াকরণের মূল অংশ, যা ব্যাচে নির্দিষ্ট কাজ চালায়। এখানে ছোট ব্যাচে ডেটা প্রসেস করে এবং প্রয়োজনীয় DML অপারেশন চালানো হয়।
global void execute(Database.BatchableContext BC, List<SObject> scope) {
for (SObject s : scope) {
Account acc = (Account) s;
acc.Name = acc.Name + ' - Processed';
}
update scope;
}
scope
প্যারামিটার হিসেবে প্রদান করা হয়।Finish Method সমস্ত ব্যাচ সম্পন্ন হওয়ার পরে চূড়ান্ত কাজ সম্পন্ন করে, যেমন লগিং, নোটিফিকেশন, বা ডেটা সংরক্ষণ করা।
global void finish(Database.BatchableContext BC) {
System.debug('Batch process completed.');
}
Batch Size Optimization হল এমন একটি কৌশল যা ব্যাচের সঠিক সাইজ নির্ধারণ করে, যাতে গভর্নর লিমিট মেনে কার্যক্ষমতা নিশ্চিত হয়। Salesforce-এ ডিফল্ট ব্যাচ সাইজ হলো ২০০, কিন্তু বড় ডেটাসেট বা ভারী প্রক্রিয়াকরণের জন্য এই সাইজ প্রয়োজন অনুযায়ী পরিবর্তন করা যায়।
Database.executeBatch(new BatchExample(), 100);
ভারী লজিকের জন্য ছোট ব্যাচ সাইজ ব্যবহার করুন: বড় ব্যাচের জন্য ৫০ বা ১০০ এর মতো ছোট সাইজ কার্যক্ষমতা বাড়াতে পারে।
Testing এবং Monitoring ব্যবহার করুন: ছোট থেকে বড় সাইজের মধ্যে বিভিন্ন ব্যাচ সাইজ টেস্ট করে কার্যক্ষমতা পরীক্ষা করুন।
ব্যাচ সাইজকে ডায়নামিকভাবে সেট করুন: বিভিন্ন পরিস্থিতি অনুযায়ী ব্যাচ সাইজ নির্ধারণ করতে ডায়নামিক অপশন ব্যবহার করা যায়।
Exception Handling যুক্ত করুন: গভর্নর লিমিট অতিক্রম এড়াতে Exception Handling নিশ্চিত করুন।
Database.Stateful ব্যবহার করুন: Database.Stateful
ব্যবহার করে ব্যাচ সাইজের সঠিকতা এবং ডেটা স্টেট ট্র্যাক করা যেতে পারে।
global class StatefulBatchExample implements Database.Batchable<SObject>, Database.Stateful {
global Integer processedRecords = 0;
global Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
global void execute(Database.BatchableContext BC, List<SObject> scope) {
for (SObject s : scope) {
Account acc = (Account) s;
acc.Name = acc.Name + ' - Processed';
processedRecords++;
}
update scope;
}
global void finish(Database.BatchableContext BC) {
System.debug('Total Records Processed: ' + processedRecords);
}
}
Batch Apex Execution Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের একটি কার্যকরী পদ্ধতি, যা তিনটি মেথড (start, execute, এবং finish) দ্বারা কাজ করে। Batch Size Optimization গভর্নর লিমিট মেনে চলা এবং কার্যক্ষমতা নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ। ছোট ব্যাচ সাইজ ভারী প্রক্রিয়াকরণের জন্য কার্যকরী এবং বড় ব্যাচের জন্য বেশি কার্যক্ষম। সঠিক ব্যাচ সাইজ নির্বাচন, Exception Handling, এবং Logging নিশ্চিত করে Batch Apex Execution আরও কার্যকরী করা সম্ভব।
Batch Apex Salesforce-এ বড় ডেটাসেট প্রক্রিয়া করার জন্য ব্যবহৃত একটি Asynchronous ফ্রেমওয়ার্ক, যা বড় ডেটাসেটকে ছোট ছোট ব্যাচে ভাগ করে গভর্নর লিমিট মেনে কার্যক্ষমতা নিশ্চিত করে। Governor Limits হলো Salesforce-এর নির্ধারিত সীমা, যা প্রতিটি অ্যাপ্লিকেশন বা ট্রানজ্যাকশনের জন্য সিস্টেমের রিসোর্স ব্যবহারের পরিমাণ সীমাবদ্ধ করে। Batch Apex গভর্নর লিমিট মেনে চলতে অত্যন্ত কার্যকর, কারণ প্রতিটি ব্যাচের জন্য গভর্নর লিমিট পুনরায় রিসেট হয়।
Batch Apex মূলত বড় ডেটাসেট বা বড় কার্যক্রম একবারে প্রসেস না করে কয়েকটি ছোট ব্যাচে ভাগ করে সম্পন্ন করে। এটি গভর্নর লিমিট মেনে কার্যক্রম সম্পন্ন করতে সক্ষম হয়, কারণ প্রতিটি ব্যাচ একক ট্রানজ্যাকশন হিসেবে বিবেচিত হয় এবং প্রতিটি ব্যাচের জন্য গভর্নর লিমিট পুনরায় শুরু হয়। এভাবে Batch Apex গভর্নর লিমিটের মধ্যে থেকে বড় ডেটাসেটের উপর কার্যক্রম পরিচালনা করতে পারে।
Batch Apex-এর ক্ষেত্রে Salesforce কিছু নির্দিষ্ট গভর্নর লিমিট প্রয়োগ করে, যা প্রতিটি ব্যাচ বা পুরো ব্যাচ জব-এর জন্য প্রযোজ্য।
সঠিক ব্যাচ সাইজ নির্ধারণ: গভর্নর লিমিট অতিক্রম না করে কার্যক্ষমতা বাড়াতে ব্যাচ সাইজ উপযুক্তভাবে নির্ধারণ করা গুরুত্বপূর্ণ। সাধারণত, প্রতি ব্যাচে ১০০ থেকে ২০০ রেকর্ড ব্যবহার করা একটি ভালো অনুশীলন।
SOQL Query Optimisation: SOQL কুয়েরি অপ্টিমাইজ করে গভর্নর লিমিট মেনে চলা উচিত। WHERE
এবং LIMIT
ক্লজ ব্যবহার করে অপ্রয়োজনীয় ডেটা রিটার্ন করা এড়ানো উচিত।
Bulk DML ব্যবহার: DML স্টেটমেন্ট সীমা মেনে চলতে Bulk DML (যেমন update scope;
) ব্যবহার করে কয়েকটি রেকর্ড একত্রে আপডেট করা উচিত।
Batch Size এবং গভর্নর লিমিট রিসেট: প্রতিটি ব্যাচ গভর্নর লিমিট পুনরায় রিসেট করে কাজ করে, যা বড় কাজ পরিচালনা সহজ করে এবং গভর্নর লিমিট অতিক্রম না করেই কার্যক্ষমতা বজায় রাখে।
Exception Handling যুক্ত করুন: ব্যাচ জব-এ Exception Handling অন্তর্ভুক্ত করে ত্রুটি পরিচালনা করতে হবে, যাতে কোনো ত্রুটি ঘটলেও বাকি ব্যাচ প্রক্রিয়া সম্পন্ন হয়।
নিচে একটি Batch Apex উদাহরণ দেয়া হলো, যা Account
অবজেক্টের নাম আপডেট করে।
public class AccountBatchExample implements Database.Batchable<SObject> {
public Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
public void execute(Database.BatchableContext BC, List<SObject> scope) {
for (SObject s : scope) {
Account acc = (Account) s;
acc.Name = acc.Name + ' Updated';
}
update scope;
}
public void finish(Database.BatchableContext BC) {
System.debug('Batch process completed.');
}
}
// Batch Apex ক্লাস চালানোর জন্য
Database.executeBatch(new AccountBatchExample(), 100);
start
মেথড একটি SOQL কুয়েরি ব্যবহার করে Account
রেকর্ডের একটি লিস্ট রিটার্ন করে।execute
মেথড প্রতিটি ব্যাচের জন্য কাজ সম্পন্ন করে এবং update scope;
ব্যবহার করে Bulk DML অপারেশন সম্পন্ন করে।finish
মেথড সম্পূর্ণ ব্যাচ প্রক্রিয়াকরণ শেষে একটি বার্তা প্রিন্ট করে।ডেটাবেস স্থিতিশীলতা: গভর্নর লিমিট মেনে কাজ করলে ডেটাবেসের স্থিতিশীলতা বজায় থাকে এবং সিস্টেম অতিরিক্ত লোড এড়িয়ে চলে।
বড় ডেটাসেট প্রক্রিয়াকরণ: বড় ডেটাসেটকে একত্রে না করে ছোট ব্যাচে ভাগ করা হয়, যা গভর্নর লিমিট অতিক্রম না করেই কার্যক্ষমতা নিশ্চিত করে।
ডেটা সুরক্ষা এবং নিয়ন্ত্রণ: গভর্নর লিমিট মেনে কাজ করার মাধ্যমে ডেটার সুরক্ষা এবং নিয়ন্ত্রণ বজায় থাকে।
সহজ ত্রুটি নির্ণয়: গভর্নর লিমিট মেনে কাজ করলে প্রতিটি ব্যাচে ত্রুটি সহজে শনাক্ত করা যায় এবং নির্দিষ্ট ব্যাচে শুধুমাত্র ত্রুটি সমাধান করা সম্ভব হয়।
Batch Apex Salesforce গভর্নর লিমিট মেনে বড় ডেটাসেট প্রক্রিয়াকরণে সহায়ক। এটি বড় কাজগুলোকে ছোট ব্যাচে ভাগ করে পরিচালনা করে এবং প্রতিটি ব্যাচের জন্য গভর্নর লিমিট পুনরায় শুরু হয়, যা কার্যক্ষমতা উন্নত করে। Apex ডেভেলপমেন্টে গভর্নর লিমিট মেনে Batch Apex ব্যবহার একটি ভালো এবং নিরাপদ অনুশীলন, যা অ্যাপ্লিকেশন স্থায়িত্ব এবং নির্ভরযোগ্যতা নিশ্চিত করে।
Batch Apex Salesforce প্ল্যাটফর্মে বড় ডেটাসেট প্রক্রিয়াকরণ এবং পরিচালনার জন্য ব্যবহৃত একটি শক্তিশালী টুল। সঠিক ব্যবস্থাপনা এবং Best Practices অনুসরণ করে Batch Apex আরও কার্যকর, স্থিতিশীল এবং গভর্নর লিমিট মেনে কাজ সম্পন্ন করতে সহায়ক। সঠিক ব্যবস্থাপনা নিশ্চিত করতে সঠিক ব্যাচ সাইজ নির্বাচন, Exception Handling, এবং ডেটা সুরক্ষা নিশ্চিত করতে কিছু গুরুত্বপূর্ণ কৌশল অনুসরণ করতে হয়।
Batch Apex ব্যবস্থাপনা Salesforce-এ কার্যকর প্রক্রিয়াকরণের জন্য বেশ কিছু কৌশল মেনে চলে। এর মধ্যে রয়েছে সঠিক ব্যাচ সাইজ নির্বাচন, লজিক অপ্টিমাইজ করা, এবং গভর্নর লিমিট মেনে কাজ করা।
ব্যাচ সাইজ নির্ধারণ: ব্যাচের সঠিক সাইজ নিশ্চিত করে গভর্নর লিমিটের মধ্যে প্রক্রিয়া সম্পন্ন করতে হবে। বড় প্রক্রিয়ার জন্য সাধারণত ব্যাচ সাইজ ৫০ থেকে ১০০ করা উত্তম।
Database.executeBatch(new BatchExample(), 100);
Batchable Context ব্যবহার করা: BatchableContext ব্যবহার করে প্রতিটি ব্যাচের প্রসেস ট্র্যাক করা যায় এবং প্রয়োজনমতো ব্যাচ সাইজ এবং অবস্থান নিয়ন্ত্রণ করা যায়।
Stateful ইন্টারফেস: Database.Stateful
ইন্টারফেস ব্যবহার করে ডেটা স্টেট ট্র্যাক রাখা যায়, যাতে ব্যাচ প্রসেসিং চলাকালীন একটি চলমান ডেটা অবস্থান রাখা যায়।
global class StatefulBatchExample implements Database.Batchable<SObject>, Database.Stateful {
global Integer processedRecords = 0;
// execute method
}
Scheduled Batch Apex: বড় প্রসেসের জন্য Batch Apex একটি নির্দিষ্ট সময়ে চালানোর জন্য Schedulable
ইন্টারফেস ব্যবহার করে নির্ধারিত সময়ে প্রসেসিং করা যায়।
System.schedule('Nightly Batch Job', '0 0 1 * * ?', new BatchExample());
গভর্নর লিমিট মেনে চলা: SOQL, DML এবং অন্যান্য গভর্নর লিমিট মেনে চলার জন্য যথাসম্ভব সীমিত অপারেশন করা উচিত। প্রতি ব্যাচে SOQL এবং DML অপারেশন সীমাবদ্ধ করা প্রয়োজন।
Batch Apex এর জন্য কিছু Best Practices অনুসরণ করলে প্রক্রিয়াকরণ আরও স্থিতিশীল, কার্যকরী এবং গভর্নর লিমিটের মধ্যে সম্পন্ন করা যায়।
ব্যাচ সাইজ সীমাবদ্ধ রাখুন: বড় ডেটাসেটের জন্য ব্যাচ সাইজ ৫০ থেকে ১০০ নির্ধারণ করুন। ভারী লজিক্যাল প্রক্রিয়াকরণে ছোট ব্যাচ সাইজ ব্যবহার করা উত্তম।
Exception Handling ব্যবহার করুন: প্রতিটি ব্যাচে Exception Handling নিশ্চিত করুন, যাতে কোনো ব্যাচে সমস্যা হলে পুরো প্রক্রিয়া ব্যাহত না হয়।
global void execute(Database.BatchableContext BC, List<SObject> scope) {
try {
update scope;
} catch (Exception e) {
System.debug('Error processing batch: ' + e.getMessage());
}
}
Database.Stateful ব্যবহার করুন: ব্যাচ প্রসেস চলাকালীন কোনো ডেটা স্টেট ট্র্যাক করতে Database.Stateful
ব্যবহার করুন। এটি বড় প্রসেসের জন্য কার্যকরী।
SOQL ইনজেকশন প্রতিরোধ করুন: ইনপুট স্যানিটাইজেশন এবং Bind Variable ব্যবহার করে SOQL ইনজেকশন প্রতিরোধ নিশ্চিত করুন।
String safeInput = String.escapeSingleQuotes(input);
আলাদা টেস্ট ক্লাস তৈরি করুন: Batch Apex-এ ৭৫% টেস্ট কাভারেজ নিশ্চিত করার জন্য আলাদা টেস্ট ক্লাস এবং মেথড ব্যবহার করুন।
@isTest
public class BatchExampleTest {
@isTest
static void testBatchExecution() {
Test.startTest();
Database.executeBatch(new BatchExample(), 100);
Test.stopTest();
}
}
Scheduled Jobs এর সংখ্যা নিয়ন্ত্রণ করুন: একাধিক ব্যাচ জব নির্ধারণ করলে সিস্টেমে লোড পড়তে পারে, তাই নির্দিষ্ট সময়ে একাধিক ব্যাচ না চালিয়ে পরিকল্পিতভাবে ব্যাচ চালান।
Logging এবং Monitoring নিশ্চিত করুন: ব্যাচ প্রসেসের সময় সঠিকভাবে লগ এবং মনিটরিং ব্যবস্থা নিশ্চিত করুন, যাতে কোনো ব্যাচ সফল হয়েছে বা ব্যর্থ হয়েছে তা ট্র্যাক করা যায়।
Database.SaveResult ব্যবহার করুন: ব্যাচ প্রসেসিং-এর সময় কোনো রেকর্ডে ত্রুটি হলে Database.SaveResult
ব্যবহার করে ত্রুটি সনাক্ত করুন এবং ত্রুটি রেকর্ড ট্যাগ করে রাখুন।
Database.SaveResult[] results = Database.update(scope, false);
for (Database.SaveResult sr : results) {
if (!sr.isSuccess()) {
System.debug('Failed Record: ' + sr.getErrors()[0].getMessage());
}
}
Reusability এবং Optimization নিশ্চিত করুন: Batch Apex ক্লাসকে পুনরায় ব্যবহারযোগ্য এবং সহজে পরিবর্তনযোগ্য রাখুন। যে লজিক অন্য ক্লাসে পুনরায় ব্যবহৃত হতে পারে, তা আলাদা মেথডে সংরক্ষণ করুন।
Governor Limit Logging: গভর্নর লিমিট এবং API লিমিট ট্র্যাক করে প্রয়োজনে প্রসেস পরিবর্তন করুন।
Batch Apex Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের জন্য অত্যন্ত কার্যকরী এবং নির্ভরযোগ্য একটি পদ্ধতি। সঠিক ব্যবস্থাপনা নিশ্চিত করতে সঠিক ব্যাচ সাইজ, Stateful ব্যবহার, এবং গভর্নর লিমিটের মধ্যে কাজ সম্পন্ন করা গুরুত্বপূর্ণ। এছাড়াও, Exception Handling, SOQL ইনজেকশন প্রতিরোধ, Logging এবং Monitoring, এবং Test Coverage নিশ্চিত করা উত্তম প্রক্রিয়াগুলো অনুসরণ করে Batch Apex-এর কার্যক্ষমতা, স্থিতিশীলতা, এবং নিরাপত্তা বৃদ্ধি করা যায়।
Batch Apex ব্যবস্থাপনার সঠিক অনুশীলনগুলি মেনে চলার মাধ্যমে বড় ডেটাসেট এবং জটিল প্রক্রিয়াকরণের ক্ষেত্রে Salesforce অ্যাপ্লিকেশন আরও কার্যকরী এবং নিরাপদ রাখা সম্ভব।
Read more